{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "accelerator": "GPU",
    "colab": {
      "name": "fer2013.ipynb",
      "provenance": [],
      "collapsed_sections": [],
      "machine_shape": "hm",
      "include_colab_link": true
    },
    "kernelspec": {
      "display_name": "Environment (conda_tensorflow_p36)",
      "language": "python",
      "name": "conda_tensorflow_p36"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.6.5"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/amilkh/cs230-fer/blob/transfer-learning/Final-VGG16-ClassWeights.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "gwdg7Sv3XBaP",
        "outputId": "3a56bc3b-7c5b-418f-cc57-0209be6ce138",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 577
        }
      },
      "source": [
        "%tensorflow_version 1.x\n",
        "!pip install keras-vggface\n",
        "!pip install scikit-image\n",
        "!pip install pydot"
      ],
      "execution_count": 1,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Collecting keras-vggface\n",
            "  Downloading https://files.pythonhosted.org/packages/2f/7d/5f0319ebdc09ac1a2272364fa9583f5067b6f8aff93fbbf8835d81cbaad7/keras_vggface-0.6-py3-none-any.whl\n",
            "Requirement already satisfied: numpy>=1.9.1 in /usr/local/lib/python3.6/dist-packages (from keras-vggface) (1.18.1)\n",
            "Requirement already satisfied: pyyaml in /usr/local/lib/python3.6/dist-packages (from keras-vggface) (3.13)\n",
            "Requirement already satisfied: six>=1.9.0 in /usr/local/lib/python3.6/dist-packages (from keras-vggface) (1.12.0)\n",
            "Requirement already satisfied: keras in /usr/local/lib/python3.6/dist-packages (from keras-vggface) (2.2.5)\n",
            "Requirement already satisfied: h5py in /usr/local/lib/python3.6/dist-packages (from keras-vggface) (2.8.0)\n",
            "Requirement already satisfied: scipy>=0.14 in /usr/local/lib/python3.6/dist-packages (from keras-vggface) (1.4.1)\n",
            "Requirement already satisfied: pillow in /usr/local/lib/python3.6/dist-packages (from keras-vggface) (7.0.0)\n",
            "Requirement already satisfied: keras-applications>=1.0.8 in /usr/local/lib/python3.6/dist-packages (from keras->keras-vggface) (1.0.8)\n",
            "Requirement already satisfied: keras-preprocessing>=1.1.0 in /usr/local/lib/python3.6/dist-packages (from keras->keras-vggface) (1.1.0)\n",
            "Installing collected packages: keras-vggface\n",
            "Successfully installed keras-vggface-0.6\n",
            "Requirement already satisfied: scikit-image in /usr/local/lib/python3.6/dist-packages (0.16.2)\n",
            "Requirement already satisfied: scipy>=0.19.0 in /usr/local/lib/python3.6/dist-packages (from scikit-image) (1.4.1)\n",
            "Requirement already satisfied: networkx>=2.0 in /usr/local/lib/python3.6/dist-packages (from scikit-image) (2.4)\n",
            "Requirement already satisfied: imageio>=2.3.0 in /usr/local/lib/python3.6/dist-packages (from scikit-image) (2.4.1)\n",
            "Requirement already satisfied: pillow>=4.3.0 in /usr/local/lib/python3.6/dist-packages (from scikit-image) (7.0.0)\n",
            "Requirement already satisfied: matplotlib!=3.0.0,>=2.0.0 in /usr/local/lib/python3.6/dist-packages (from scikit-image) (3.2.0)\n",
            "Requirement already satisfied: PyWavelets>=0.4.0 in /usr/local/lib/python3.6/dist-packages (from scikit-image) (1.1.1)\n",
            "Requirement already satisfied: numpy>=1.13.3 in /usr/local/lib/python3.6/dist-packages (from scipy>=0.19.0->scikit-image) (1.18.1)\n",
            "Requirement already satisfied: decorator>=4.3.0 in /usr/local/lib/python3.6/dist-packages (from networkx>=2.0->scikit-image) (4.4.2)\n",
            "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib!=3.0.0,>=2.0.0->scikit-image) (2.4.6)\n",
            "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.6/dist-packages (from matplotlib!=3.0.0,>=2.0.0->scikit-image) (0.10.0)\n",
            "Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib!=3.0.0,>=2.0.0->scikit-image) (2.8.1)\n",
            "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib!=3.0.0,>=2.0.0->scikit-image) (1.1.0)\n",
            "Requirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from cycler>=0.10->matplotlib!=3.0.0,>=2.0.0->scikit-image) (1.12.0)\n",
            "Requirement already satisfied: setuptools in /usr/local/lib/python3.6/dist-packages (from kiwisolver>=1.0.1->matplotlib!=3.0.0,>=2.0.0->scikit-image) (45.2.0)\n",
            "Requirement already satisfied: pydot in /usr/local/lib/python3.6/dist-packages (1.3.0)\n",
            "Requirement already satisfied: pyparsing>=2.1.4 in /usr/local/lib/python3.6/dist-packages (from pydot) (2.4.6)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "2nz38mJZXN_P",
        "outputId": "664a894c-0190-4e5a-82d3-0efd65ef7102",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "import matplotlib.pyplot as plt\n",
        "import pandas as pd\n",
        "import numpy as np\n",
        "\n",
        "import tensorflow as tf\n",
        "from tensorflow.keras.layers import *\n",
        "from tensorflow.python.lib.io import file_io\n",
        "\n",
        "%matplotlib inline\n",
        "\n",
        "import keras\n",
        "from keras import backend as K\n",
        "from keras.callbacks import ModelCheckpoint, EarlyStopping\n",
        "from keras.models import load_model\n",
        "from keras.preprocessing.image import ImageDataGenerator\n",
        "from keras_vggface.vggface import VGGFace\n",
        "from keras.utils import plot_model\n",
        "from sklearn.metrics import *\n",
        "from keras.engine import Model\n",
        "from keras.layers import Input, Flatten, Dense, Activation, Conv2D, MaxPool2D, BatchNormalization, Dropout, MaxPooling2D\n",
        "import skimage\n",
        "from skimage.transform import rescale, resize\n",
        "\n",
        "import pydot"
      ],
      "execution_count": 2,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Using TensorFlow backend.\n"
          ],
          "name": "stderr"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "1fZczU8lGkX-",
        "colab_type": "code",
        "outputId": "17b897b9-1e01-4989-83dd-cc9ba4412060",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 127
        }
      },
      "source": [
        "from google.colab import drive\n",
        "drive.mount('/content/drive')"
      ],
      "execution_count": 3,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=947318989803-6bn6qk8qdgf4n4g3pfee6491hc0brc4i.apps.googleusercontent.com&redirect_uri=urn%3aietf%3awg%3aoauth%3a2.0%3aoob&response_type=code&scope=email%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdocs.test%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive.photos.readonly%20https%3a%2f%2fwww.googleapis.com%2fauth%2fpeopleapi.readonly\n",
            "\n",
            "Enter your authorization code:\n",
            "··········\n",
            "Mounted at /content/drive\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "nUcd6yIGduUW",
        "outputId": "3600b4b0-1b4d-4e93-b3e8-1aa8806cea2e",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 53
        }
      },
      "source": [
        "print(tf.__version__)\n",
        "print(keras.__version__)"
      ],
      "execution_count": 4,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "1.15.0\n",
            "2.2.5\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "v60q28mDHnN9",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "EPOCHS = 50\n",
        "BS = 128\n",
        "DROPOUT_RATE = 0.5\n",
        "FROZEN_LAYER_NUM = 19\n",
        "\n",
        "ADAM_LEARNING_RATE = 0.001\n",
        "SGD_LEARNING_RATE = 0.01\n",
        "SGD_DECAY = 0.0001\n",
        "\n",
        "Resize_pixelsize = 197"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "itKZtFV0F7b1",
        "colab_type": "code",
        "outputId": "99c2a8c4-46ad-41f9-fcc9-bdd5a5c0f1b4",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        }
      },
      "source": [
        "vgg_notop = VGGFace(model='vgg16', include_top=False, input_shape=(Resize_pixelsize, Resize_pixelsize, 3), pooling='avg')\n",
        "print(vgg_notop.summary())\n",
        "last_layer = vgg_notop.get_layer('pool5').output\n",
        "x = Flatten(name='flatten')(last_layer)\n",
        "x = Dropout(DROPOUT_RATE)(x)\n",
        "x = Dense(4096, activation='relu', name='fc6')(x)\n",
        "x = Dropout(DROPOUT_RATE)(x)\n",
        "x = Dense(1024, activation='relu', name='fc7')(x)\n",
        "\n",
        "for i in range(FROZEN_LAYER_NUM):\n",
        "    vgg_notop.layers[i].trainable = False\n",
        "\n",
        "print(vgg_notop.get_layer('pool5').trainable)\n",
        "\n",
        "out = Dense(7, activation='softmax', name='classifier')(x)\n",
        "\n",
        "model = Model(vgg_notop.input, out)\n",
        "\n",
        "\n",
        "optim = keras.optimizers.Adam(lr=ADAM_LEARNING_RATE, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)\n",
        "#optim = keras.optimizers.Adam(lr=0.0005, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)\n",
        "sgd = keras.optimizers.SGD(lr=SGD_LEARNING_RATE, momentum=0.9, decay=SGD_DECAY, nesterov=True)\n",
        "rlrop = keras.callbacks.ReduceLROnPlateau(monitor='val_acc',mode='max',factor=0.5, patience=10, min_lr=0.00001, verbose=1)\n",
        "\n",
        "model.compile(optimizer=sgd, loss='categorical_crossentropy', metrics=['accuracy'])"
      ],
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:66: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n",
            "\n",
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:541: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.\n",
            "\n",
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:4432: The name tf.random_uniform is deprecated. Please use tf.random.uniform instead.\n",
            "\n",
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:4267: The name tf.nn.max_pool is deprecated. Please use tf.nn.max_pool2d instead.\n",
            "\n",
            "Downloading data from https://github.com/rcmalli/keras-vggface/releases/download/v2.0/rcmalli_vggface_tf_notop_vgg16.h5\n",
            "58916864/58909280 [==============================] - 1s 0us/step\n",
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:190: The name tf.get_default_session is deprecated. Please use tf.compat.v1.get_default_session instead.\n",
            "\n",
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:197: The name tf.ConfigProto is deprecated. Please use tf.compat.v1.ConfigProto instead.\n",
            "\n",
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:203: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.\n",
            "\n",
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:207: The name tf.global_variables is deprecated. Please use tf.compat.v1.global_variables instead.\n",
            "\n",
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:216: The name tf.is_variable_initialized is deprecated. Please use tf.compat.v1.is_variable_initialized instead.\n",
            "\n",
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:223: The name tf.variables_initializer is deprecated. Please use tf.compat.v1.variables_initializer instead.\n",
            "\n",
            "Model: \"vggface_vgg16\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "input_1 (InputLayer)         (None, 197, 197, 3)       0         \n",
            "_________________________________________________________________\n",
            "conv1_1 (Conv2D)             (None, 197, 197, 64)      1792      \n",
            "_________________________________________________________________\n",
            "conv1_2 (Conv2D)             (None, 197, 197, 64)      36928     \n",
            "_________________________________________________________________\n",
            "pool1 (MaxPooling2D)         (None, 98, 98, 64)        0         \n",
            "_________________________________________________________________\n",
            "conv2_1 (Conv2D)             (None, 98, 98, 128)       73856     \n",
            "_________________________________________________________________\n",
            "conv2_2 (Conv2D)             (None, 98, 98, 128)       147584    \n",
            "_________________________________________________________________\n",
            "pool2 (MaxPooling2D)         (None, 49, 49, 128)       0         \n",
            "_________________________________________________________________\n",
            "conv3_1 (Conv2D)             (None, 49, 49, 256)       295168    \n",
            "_________________________________________________________________\n",
            "conv3_2 (Conv2D)             (None, 49, 49, 256)       590080    \n",
            "_________________________________________________________________\n",
            "conv3_3 (Conv2D)             (None, 49, 49, 256)       590080    \n",
            "_________________________________________________________________\n",
            "pool3 (MaxPooling2D)         (None, 24, 24, 256)       0         \n",
            "_________________________________________________________________\n",
            "conv4_1 (Conv2D)             (None, 24, 24, 512)       1180160   \n",
            "_________________________________________________________________\n",
            "conv4_2 (Conv2D)             (None, 24, 24, 512)       2359808   \n",
            "_________________________________________________________________\n",
            "conv4_3 (Conv2D)             (None, 24, 24, 512)       2359808   \n",
            "_________________________________________________________________\n",
            "pool4 (MaxPooling2D)         (None, 12, 12, 512)       0         \n",
            "_________________________________________________________________\n",
            "conv5_1 (Conv2D)             (None, 12, 12, 512)       2359808   \n",
            "_________________________________________________________________\n",
            "conv5_2 (Conv2D)             (None, 12, 12, 512)       2359808   \n",
            "_________________________________________________________________\n",
            "conv5_3 (Conv2D)             (None, 12, 12, 512)       2359808   \n",
            "_________________________________________________________________\n",
            "pool5 (MaxPooling2D)         (None, 6, 6, 512)         0         \n",
            "_________________________________________________________________\n",
            "global_average_pooling2d_1 ( (None, 512)               0         \n",
            "=================================================================\n",
            "Total params: 14,714,688\n",
            "Trainable params: 14,714,688\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n",
            "None\n",
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:148: The name tf.placeholder_with_default is deprecated. Please use tf.compat.v1.placeholder_with_default instead.\n",
            "\n",
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:3733: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be removed in a future version.\n",
            "Instructions for updating:\n",
            "Please use `rate` instead of `keep_prob`. Rate should be set to `rate = 1 - keep_prob`.\n",
            "False\n",
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/optimizers.py:793: The name tf.train.Optimizer is deprecated. Please use tf.compat.v1.train.Optimizer instead.\n",
            "\n",
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:3576: The name tf.log is deprecated. Please use tf.math.log instead.\n",
            "\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "v0mXUNZB-yI5",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "! rm -rf train; mkdir train\n",
        "! unzip -q '/content/drive/My Drive/cs230 project/dataset/emotion.zip' -d train\n",
        "! unzip -q '/content/drive/My Drive/cs230 project/dataset/facesdb.zip' -d train\n",
        "! unzip -q '/content/drive/My Drive/cs230 project/dataset/fer2013/train.zip' -d train\n",
        "! unzip -q '/content/drive/My Drive/cs230 project/dataset/googlesearch.zip' -d train\n",
        "! unzip -q '/content/drive/My Drive/cs230 project/dataset/googleset.zip' -d train\n",
        "! unzip -q '/content/drive/My Drive/cs230 project/dataset/jaffe.zip' -d train\n",
        "! unzip -q '/content/drive/My Drive/cs230 project/dataset/umea.zip' -d train"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "TUuN9SLX_Qvl",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "! rm -rf dev; mkdir dev\n",
        "! unzip -q '/content/drive/My Drive/cs230 project/dataset/fer2013/test-public.zip' -d dev\n",
        "! rm -rf test; mkdir test\n",
        "! unzip -q '/content/drive/My Drive/cs230 project/dataset/fer2013/test-private.zip' -d test"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "560jefnZ_Cyq",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n",
        "\n",
        "def get_datagen(dataset, aug=False):\n",
        "    if aug:\n",
        "        datagen = ImageDataGenerator(\n",
        "                            rescale=1./255,\n",
        "                            featurewise_center=False,\n",
        "                            featurewise_std_normalization=False,\n",
        "                            rotation_range=10,\n",
        "                            width_shift_range=0.1,\n",
        "                            height_shift_range=0.1,\n",
        "                            zoom_range=0.1,\n",
        "                            horizontal_flip=True)\n",
        "    else:\n",
        "        datagen = ImageDataGenerator(rescale=1./255)\n",
        "\n",
        "    return datagen.flow_from_directory(\n",
        "            dataset,\n",
        "            target_size=(197, 197),\n",
        "            color_mode='rgb',\n",
        "            shuffle = True,\n",
        "            class_mode='categorical',\n",
        "            batch_size=BS)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "4aQAGQP5_Gpl",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 127
        },
        "outputId": "58b56fc5-b677-42b2-c91d-3c6754c09024"
      },
      "source": [
        "train_generator  = get_datagen('/content/train', True)\n",
        "dev_generator    = get_datagen('/content/dev')\n",
        "test_generator  = get_datagen('/content/test')\n"
      ],
      "execution_count": 10,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "/usr/local/lib/python3.6/dist-packages/keras_preprocessing/image/utils.py:173: UserWarning: Using \".tiff\" files with multiple bands will cause distortion. Please verify your output.\n",
            "  warnings.warn('Using \".tiff\" files with multiple bands '\n"
          ],
          "name": "stderr"
        },
        {
          "output_type": "stream",
          "text": [
            "Found 30452 images belonging to 7 classes.\n",
            "Found 3589 images belonging to 7 classes.\n",
            "Found 3589 images belonging to 7 classes.\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "GyHmZ5GRBdRl",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from sklearn.utils import class_weight\n",
        "file_stream = file_io.FileIO('/content/drive/My Drive/cs230 project/collab/fer2013/dev.csv', mode='r')\n",
        "data = pd.read_csv(file_stream)\n",
        "data[' pixels'] = data[' pixels'].apply(lambda x: [int(pixel) for pixel in x.split()])\n",
        "X, Y = data[' pixels'].tolist(), data['emotion'].values\n",
        "class_weights = class_weight.compute_class_weight('balanced',\n",
        "                                                    np.unique(Y),\n",
        "                                                    Y)\n"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "pLISdlaStbUn",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "outputId": "44204244-5315-4a0c-aea9-ea3191fada5f"
      },
      "source": [
        "history = model.fit_generator(\n",
        "    generator = train_generator,\n",
        "    validation_data=dev_generator, \n",
        "    steps_per_epoch=28709// BS,\n",
        "    validation_steps=3509 // BS,\n",
        "    shuffle=True,\n",
        "    epochs=100,\n",
        "    callbacks=[rlrop],\n",
        "    use_multiprocessing=True,\n",
        ") "
      ],
      "execution_count": 12,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:From /tensorflow-1.15.0/python3.6/tensorflow_core/python/ops/math_grad.py:1424: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n",
            "Instructions for updating:\n",
            "Use tf.where in 2.0, which has the same broadcast rule as np.where\n",
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:1033: The name tf.assign_add is deprecated. Please use tf.compat.v1.assign_add instead.\n",
            "\n",
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:1020: The name tf.assign is deprecated. Please use tf.compat.v1.assign instead.\n",
            "\n",
            "Epoch 1/100\n",
            "224/224 [==============================] - 284s 1s/step - loss: 1.4781 - acc: 0.4389 - val_loss: 1.1864 - val_acc: 0.5697\n",
            "Epoch 2/100\n",
            "224/224 [==============================] - 281s 1s/step - loss: 1.2229 - acc: 0.5462 - val_loss: 1.1079 - val_acc: 0.5995\n",
            "Epoch 3/100\n",
            "224/224 [==============================] - 282s 1s/step - loss: 1.1653 - acc: 0.5646 - val_loss: 1.0875 - val_acc: 0.5941\n",
            "Epoch 4/100\n",
            "224/224 [==============================] - 278s 1s/step - loss: 1.1312 - acc: 0.5803 - val_loss: 1.0588 - val_acc: 0.6040\n",
            "Epoch 5/100\n",
            "224/224 [==============================] - 274s 1s/step - loss: 1.1135 - acc: 0.5852 - val_loss: 1.0577 - val_acc: 0.6064\n",
            "Epoch 6/100\n",
            "224/224 [==============================] - 280s 1s/step - loss: 1.0772 - acc: 0.6017 - val_loss: 1.0191 - val_acc: 0.6133\n",
            "Epoch 7/100\n",
            "224/224 [==============================] - 279s 1s/step - loss: 1.0729 - acc: 0.6024 - val_loss: 1.0644 - val_acc: 0.5989\n",
            "Epoch 8/100\n",
            "224/224 [==============================] - 278s 1s/step - loss: 1.0493 - acc: 0.6138 - val_loss: 0.9737 - val_acc: 0.6379\n",
            "Epoch 9/100\n",
            "224/224 [==============================] - 281s 1s/step - loss: 1.0480 - acc: 0.6078 - val_loss: 1.0145 - val_acc: 0.6271\n",
            "Epoch 10/100\n",
            "224/224 [==============================] - 280s 1s/step - loss: 1.0351 - acc: 0.6102 - val_loss: 0.9961 - val_acc: 0.6253\n",
            "Epoch 11/100\n",
            "224/224 [==============================] - 279s 1s/step - loss: 1.0107 - acc: 0.6255 - val_loss: 1.0039 - val_acc: 0.6199\n",
            "Epoch 12/100\n",
            "224/224 [==============================] - 278s 1s/step - loss: 1.0048 - acc: 0.6233 - val_loss: 0.9722 - val_acc: 0.6412\n",
            "Epoch 13/100\n",
            "224/224 [==============================] - 276s 1s/step - loss: 0.9951 - acc: 0.6289 - val_loss: 0.9877 - val_acc: 0.6307\n",
            "Epoch 14/100\n",
            "224/224 [==============================] - 277s 1s/step - loss: 0.9875 - acc: 0.6333 - val_loss: 0.9813 - val_acc: 0.6304\n",
            "Epoch 15/100\n",
            "224/224 [==============================] - 281s 1s/step - loss: 0.9793 - acc: 0.6349 - val_loss: 0.9632 - val_acc: 0.6415\n",
            "Epoch 16/100\n",
            "224/224 [==============================] - 277s 1s/step - loss: 0.9633 - acc: 0.6399 - val_loss: 0.9672 - val_acc: 0.6448\n",
            "Epoch 17/100\n",
            "224/224 [==============================] - 274s 1s/step - loss: 0.9534 - acc: 0.6451 - val_loss: 0.9488 - val_acc: 0.6496\n",
            "Epoch 18/100\n",
            "224/224 [==============================] - 272s 1s/step - loss: 0.9503 - acc: 0.6456 - val_loss: 0.9625 - val_acc: 0.6427\n",
            "Epoch 19/100\n",
            "224/224 [==============================] - 275s 1s/step - loss: 0.9419 - acc: 0.6507 - val_loss: 0.9566 - val_acc: 0.6427\n",
            "Epoch 20/100\n",
            "224/224 [==============================] - 276s 1s/step - loss: 0.9386 - acc: 0.6538 - val_loss: 0.9426 - val_acc: 0.6520\n",
            "Epoch 21/100\n",
            "224/224 [==============================] - 272s 1s/step - loss: 0.9202 - acc: 0.6616 - val_loss: 0.9496 - val_acc: 0.6565\n",
            "Epoch 22/100\n",
            "224/224 [==============================] - 273s 1s/step - loss: 0.9217 - acc: 0.6571 - val_loss: 0.9526 - val_acc: 0.6538\n",
            "Epoch 23/100\n",
            "224/224 [==============================] - 272s 1s/step - loss: 0.9038 - acc: 0.6650 - val_loss: 0.9455 - val_acc: 0.6493\n",
            "Epoch 24/100\n",
            "224/224 [==============================] - 277s 1s/step - loss: 0.8997 - acc: 0.6640 - val_loss: 0.9184 - val_acc: 0.6631\n",
            "Epoch 25/100\n",
            "224/224 [==============================] - 281s 1s/step - loss: 0.8959 - acc: 0.6676 - val_loss: 0.9597 - val_acc: 0.6469\n",
            "Epoch 26/100\n",
            "224/224 [==============================] - 272s 1s/step - loss: 0.8835 - acc: 0.6704 - val_loss: 0.9351 - val_acc: 0.6532\n",
            "Epoch 27/100\n",
            "224/224 [==============================] - 270s 1s/step - loss: 0.8849 - acc: 0.6718 - val_loss: 0.9215 - val_acc: 0.6685\n",
            "Epoch 28/100\n",
            "224/224 [==============================] - 269s 1s/step - loss: 0.8763 - acc: 0.6744 - val_loss: 0.9404 - val_acc: 0.6604\n",
            "Epoch 29/100\n",
            "224/224 [==============================] - 265s 1s/step - loss: 0.8672 - acc: 0.6775 - val_loss: 0.9326 - val_acc: 0.6598\n",
            "Epoch 30/100\n",
            "224/224 [==============================] - 266s 1s/step - loss: 0.8598 - acc: 0.6808 - val_loss: 0.9274 - val_acc: 0.6606\n",
            "Epoch 31/100\n",
            "224/224 [==============================] - 269s 1s/step - loss: 0.8483 - acc: 0.6852 - val_loss: 0.9421 - val_acc: 0.6559\n",
            "Epoch 32/100\n",
            "224/224 [==============================] - 268s 1s/step - loss: 0.8522 - acc: 0.6833 - val_loss: 0.9111 - val_acc: 0.6691\n",
            "Epoch 33/100\n",
            "224/224 [==============================] - 270s 1s/step - loss: 0.8331 - acc: 0.6899 - val_loss: 0.9311 - val_acc: 0.6625\n",
            "Epoch 34/100\n",
            "224/224 [==============================] - 268s 1s/step - loss: 0.8371 - acc: 0.6892 - val_loss: 0.9122 - val_acc: 0.6733\n",
            "Epoch 35/100\n",
            "224/224 [==============================] - 263s 1s/step - loss: 0.8212 - acc: 0.6951 - val_loss: 0.9051 - val_acc: 0.6757\n",
            "Epoch 36/100\n",
            "224/224 [==============================] - 260s 1s/step - loss: 0.8185 - acc: 0.6998 - val_loss: 0.9320 - val_acc: 0.6592\n",
            "Epoch 37/100\n",
            "224/224 [==============================] - 259s 1s/step - loss: 0.8096 - acc: 0.7001 - val_loss: 0.9277 - val_acc: 0.6688\n",
            "Epoch 38/100\n",
            "224/224 [==============================] - 261s 1s/step - loss: 0.8120 - acc: 0.6984 - val_loss: 0.8756 - val_acc: 0.6844\n",
            "Epoch 39/100\n",
            "224/224 [==============================] - 259s 1s/step - loss: 0.7976 - acc: 0.7040 - val_loss: 0.9057 - val_acc: 0.6649\n",
            "Epoch 40/100\n",
            "224/224 [==============================] - 262s 1s/step - loss: 0.7962 - acc: 0.7074 - val_loss: 0.9317 - val_acc: 0.6619\n",
            "Epoch 41/100\n",
            "224/224 [==============================] - 260s 1s/step - loss: 0.7889 - acc: 0.7085 - val_loss: 0.9011 - val_acc: 0.6823\n",
            "Epoch 42/100\n",
            "224/224 [==============================] - 262s 1s/step - loss: 0.7846 - acc: 0.7095 - val_loss: 0.9168 - val_acc: 0.6712\n",
            "Epoch 43/100\n",
            "224/224 [==============================] - 263s 1s/step - loss: 0.7753 - acc: 0.7137 - val_loss: 0.9110 - val_acc: 0.6712\n",
            "Epoch 44/100\n",
            "224/224 [==============================] - 261s 1s/step - loss: 0.7728 - acc: 0.7129 - val_loss: 0.9079 - val_acc: 0.6794\n",
            "Epoch 45/100\n",
            "224/224 [==============================] - 260s 1s/step - loss: 0.7698 - acc: 0.7131 - val_loss: 0.9094 - val_acc: 0.6757\n",
            "Epoch 46/100\n",
            "224/224 [==============================] - 263s 1s/step - loss: 0.7594 - acc: 0.7184 - val_loss: 0.9159 - val_acc: 0.6697\n",
            "Epoch 47/100\n",
            "224/224 [==============================] - 261s 1s/step - loss: 0.7540 - acc: 0.7249 - val_loss: 0.9004 - val_acc: 0.6766\n",
            "Epoch 48/100\n",
            "224/224 [==============================] - 259s 1s/step - loss: 0.7481 - acc: 0.7217 - val_loss: 0.9197 - val_acc: 0.6655\n",
            "\n",
            "Epoch 00048: ReduceLROnPlateau reducing learning rate to 0.004999999888241291.\n",
            "Epoch 49/100\n",
            "224/224 [==============================] - 258s 1s/step - loss: 0.7277 - acc: 0.7296 - val_loss: 0.8890 - val_acc: 0.6940\n",
            "Epoch 50/100\n",
            "224/224 [==============================] - 260s 1s/step - loss: 0.7273 - acc: 0.7309 - val_loss: 0.9133 - val_acc: 0.6706\n",
            "Epoch 51/100\n",
            "224/224 [==============================] - 259s 1s/step - loss: 0.7223 - acc: 0.7352 - val_loss: 0.8978 - val_acc: 0.6832\n",
            "Epoch 52/100\n",
            "224/224 [==============================] - 257s 1s/step - loss: 0.7163 - acc: 0.7379 - val_loss: 0.9013 - val_acc: 0.6745\n",
            "Epoch 53/100\n",
            "224/224 [==============================] - 258s 1s/step - loss: 0.7134 - acc: 0.7385 - val_loss: 0.8924 - val_acc: 0.6877\n",
            "Epoch 54/100\n",
            "224/224 [==============================] - 261s 1s/step - loss: 0.7096 - acc: 0.7372 - val_loss: 0.9000 - val_acc: 0.6697\n",
            "Epoch 55/100\n",
            "224/224 [==============================] - 263s 1s/step - loss: 0.6954 - acc: 0.7450 - val_loss: 0.9115 - val_acc: 0.6838\n",
            "Epoch 56/100\n",
            "224/224 [==============================] - 263s 1s/step - loss: 0.7049 - acc: 0.7386 - val_loss: 0.9114 - val_acc: 0.6775\n",
            "Epoch 57/100\n",
            "224/224 [==============================] - 261s 1s/step - loss: 0.7028 - acc: 0.7383 - val_loss: 0.9013 - val_acc: 0.6838\n",
            "Epoch 58/100\n",
            "224/224 [==============================] - 258s 1s/step - loss: 0.6911 - acc: 0.7460 - val_loss: 0.9085 - val_acc: 0.6775\n",
            "Epoch 59/100\n",
            "224/224 [==============================] - 258s 1s/step - loss: 0.6932 - acc: 0.7431 - val_loss: 0.9038 - val_acc: 0.6837\n",
            "\n",
            "Epoch 00059: ReduceLROnPlateau reducing learning rate to 0.0024999999441206455.\n",
            "Epoch 60/100\n",
            "224/224 [==============================] - 256s 1s/step - loss: 0.6948 - acc: 0.7450 - val_loss: 0.8987 - val_acc: 0.6799\n",
            "Epoch 61/100\n",
            "224/224 [==============================] - 256s 1s/step - loss: 0.6753 - acc: 0.7513 - val_loss: 0.9053 - val_acc: 0.6802\n",
            "Epoch 62/100\n",
            "224/224 [==============================] - 255s 1s/step - loss: 0.6784 - acc: 0.7518 - val_loss: 0.9149 - val_acc: 0.6787\n",
            "Epoch 63/100\n",
            "224/224 [==============================] - 254s 1s/step - loss: 0.6659 - acc: 0.7551 - val_loss: 0.8971 - val_acc: 0.6811\n",
            "Epoch 64/100\n",
            "224/224 [==============================] - 254s 1s/step - loss: 0.6737 - acc: 0.7521 - val_loss: 0.9130 - val_acc: 0.6862\n",
            "Epoch 65/100\n",
            "224/224 [==============================] - 256s 1s/step - loss: 0.6745 - acc: 0.7539 - val_loss: 0.8948 - val_acc: 0.6724\n",
            "Epoch 66/100\n",
            "224/224 [==============================] - 254s 1s/step - loss: 0.6701 - acc: 0.7552 - val_loss: 0.9021 - val_acc: 0.6892\n",
            "Epoch 67/100\n",
            "224/224 [==============================] - 274s 1s/step - loss: 0.6656 - acc: 0.7537 - val_loss: 0.8874 - val_acc: 0.6892\n",
            "Epoch 68/100\n",
            "224/224 [==============================] - 272s 1s/step - loss: 0.6686 - acc: 0.7569 - val_loss: 0.9203 - val_acc: 0.6709\n",
            "Epoch 69/100\n",
            "224/224 [==============================] - 275s 1s/step - loss: 0.6660 - acc: 0.7563 - val_loss: 0.9088 - val_acc: 0.6775\n",
            "\n",
            "Epoch 00069: ReduceLROnPlateau reducing learning rate to 0.0012499999720603228.\n",
            "Epoch 70/100\n",
            "224/224 [==============================] - 277s 1s/step - loss: 0.6620 - acc: 0.7561 - val_loss: 0.9038 - val_acc: 0.6811\n",
            "Epoch 71/100\n",
            "224/224 [==============================] - 277s 1s/step - loss: 0.6610 - acc: 0.7554 - val_loss: 0.9021 - val_acc: 0.6802\n",
            "Epoch 72/100\n",
            "224/224 [==============================] - 276s 1s/step - loss: 0.6554 - acc: 0.7598 - val_loss: 0.8998 - val_acc: 0.6835\n",
            "Epoch 73/100\n",
            "224/224 [==============================] - 277s 1s/step - loss: 0.6557 - acc: 0.7601 - val_loss: 0.9030 - val_acc: 0.6829\n",
            "Epoch 74/100\n",
            "224/224 [==============================] - 277s 1s/step - loss: 0.6616 - acc: 0.7575 - val_loss: 0.9163 - val_acc: 0.6769\n",
            "Epoch 75/100\n",
            "224/224 [==============================] - 277s 1s/step - loss: 0.6512 - acc: 0.7628 - val_loss: 0.8870 - val_acc: 0.6889\n",
            "Epoch 76/100\n",
            "224/224 [==============================] - 277s 1s/step - loss: 0.6550 - acc: 0.7590 - val_loss: 0.9364 - val_acc: 0.6751\n",
            "Epoch 77/100\n",
            "224/224 [==============================] - 276s 1s/step - loss: 0.6676 - acc: 0.7543 - val_loss: 0.8947 - val_acc: 0.6766\n",
            "Epoch 78/100\n",
            "224/224 [==============================] - 277s 1s/step - loss: 0.6568 - acc: 0.7627 - val_loss: 0.8884 - val_acc: 0.6871\n",
            "Epoch 79/100\n",
            "224/224 [==============================] - 277s 1s/step - loss: 0.6526 - acc: 0.7609 - val_loss: 0.9081 - val_acc: 0.6817\n",
            "\n",
            "Epoch 00079: ReduceLROnPlateau reducing learning rate to 0.0006249999860301614.\n",
            "Epoch 80/100\n",
            "224/224 [==============================] - 278s 1s/step - loss: 0.6521 - acc: 0.7604 - val_loss: 0.9012 - val_acc: 0.6823\n",
            "Epoch 81/100\n",
            "224/224 [==============================] - 275s 1s/step - loss: 0.6561 - acc: 0.7614 - val_loss: 0.9229 - val_acc: 0.6688\n",
            "Epoch 82/100\n",
            "224/224 [==============================] - 274s 1s/step - loss: 0.6499 - acc: 0.7642 - val_loss: 0.8899 - val_acc: 0.6853\n",
            "Epoch 83/100\n",
            "224/224 [==============================] - 275s 1s/step - loss: 0.6519 - acc: 0.7597 - val_loss: 0.8844 - val_acc: 0.6841\n",
            "Epoch 84/100\n",
            "224/224 [==============================] - 278s 1s/step - loss: 0.6525 - acc: 0.7608 - val_loss: 0.9141 - val_acc: 0.6745\n",
            "Epoch 85/100\n",
            "224/224 [==============================] - 276s 1s/step - loss: 0.6475 - acc: 0.7630 - val_loss: 0.9201 - val_acc: 0.6820\n",
            "Epoch 86/100\n",
            "224/224 [==============================] - 270s 1s/step - loss: 0.6462 - acc: 0.7632 - val_loss: 0.8911 - val_acc: 0.6796\n",
            "Epoch 87/100\n",
            "224/224 [==============================] - 276s 1s/step - loss: 0.6563 - acc: 0.7611 - val_loss: 0.9100 - val_acc: 0.6784\n",
            "Epoch 88/100\n",
            "224/224 [==============================] - 277s 1s/step - loss: 0.6420 - acc: 0.7631 - val_loss: 0.9055 - val_acc: 0.6823\n",
            "Epoch 89/100\n",
            "224/224 [==============================] - 276s 1s/step - loss: 0.6534 - acc: 0.7584 - val_loss: 0.8978 - val_acc: 0.6832\n",
            "\n",
            "Epoch 00089: ReduceLROnPlateau reducing learning rate to 0.0003124999930150807.\n",
            "Epoch 90/100\n",
            "224/224 [==============================] - 277s 1s/step - loss: 0.6451 - acc: 0.7645 - val_loss: 0.9131 - val_acc: 0.6799\n",
            "Epoch 91/100\n",
            "224/224 [==============================] - 276s 1s/step - loss: 0.6455 - acc: 0.7651 - val_loss: 0.9120 - val_acc: 0.6814\n",
            "Epoch 92/100\n",
            "224/224 [==============================] - 277s 1s/step - loss: 0.6453 - acc: 0.7640 - val_loss: 0.9056 - val_acc: 0.6778\n",
            "Epoch 93/100\n",
            "224/224 [==============================] - 275s 1s/step - loss: 0.6451 - acc: 0.7668 - val_loss: 0.8986 - val_acc: 0.6877\n",
            "Epoch 94/100\n",
            "224/224 [==============================] - 277s 1s/step - loss: 0.6545 - acc: 0.7601 - val_loss: 0.9133 - val_acc: 0.6784\n",
            "Epoch 95/100\n",
            "224/224 [==============================] - 278s 1s/step - loss: 0.6434 - acc: 0.7637 - val_loss: 0.9048 - val_acc: 0.6754\n",
            "Epoch 96/100\n",
            "224/224 [==============================] - 278s 1s/step - loss: 0.6464 - acc: 0.7632 - val_loss: 0.8983 - val_acc: 0.6883\n",
            "Epoch 97/100\n",
            "224/224 [==============================] - 278s 1s/step - loss: 0.6459 - acc: 0.7645 - val_loss: 0.9032 - val_acc: 0.6802\n",
            "Epoch 98/100\n",
            "224/224 [==============================] - 278s 1s/step - loss: 0.6534 - acc: 0.7603 - val_loss: 0.8945 - val_acc: 0.6841\n",
            "Epoch 99/100\n",
            "224/224 [==============================] - 280s 1s/step - loss: 0.6427 - acc: 0.7635 - val_loss: 0.9116 - val_acc: 0.6781\n",
            "\n",
            "Epoch 00099: ReduceLROnPlateau reducing learning rate to 0.00015624999650754035.\n",
            "Epoch 100/100\n",
            "224/224 [==============================] - 280s 1s/step - loss: 0.6407 - acc: 0.7634 - val_loss: 0.9049 - val_acc: 0.6841\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "JSSv08SHF0bC",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 71
        },
        "outputId": "873b49fc-2e5a-4e8d-c905-9c52e3e5018e"
      },
      "source": [
        "print('\\n# Evaluate on dev data')\n",
        "results_dev = model.evaluate_generator(dev_generator, 3509 // BS)\n",
        "print('dev loss, dev acc:', results_dev)"
      ],
      "execution_count": 13,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "\n",
            "# Evaluate on dev data\n",
            "dev loss, dev acc: [0.9088092004811322, 0.6805555555555556]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Ev4sDYDlOsqk",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 71
        },
        "outputId": "86e7436d-7ac5-44b1-9ccd-428baa2f294e"
      },
      "source": [
        "print('\\n# Evaluate on test data')\n",
        "results_test = model.evaluate_generator(test_generator, 3509 // BS)\n",
        "print('test loss, test acc:', results_test)"
      ],
      "execution_count": 14,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "\n",
            "# Evaluate on test data\n",
            "test loss, test acc: [0.8557395471466912, 0.6961805555555556]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "m9f7smhHUQus",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 591
        },
        "outputId": "aa0f0ccd-0352-4c7c-b56b-ebc851c6ff97"
      },
      "source": [
        "# list all data in history\n",
        "print(history.history.keys())\n",
        "# summarize history for accuracy\n",
        "plt.plot(history.history['acc'])\n",
        "plt.plot(history.history['val_acc'])\n",
        "plt.title('model accuracy')\n",
        "plt.ylabel('accuracy')\n",
        "plt.xlabel('epoch')\n",
        "plt.legend(['train', 'dev'], loc='upper left')\n",
        "plt.show()\n",
        "# summarize history for loss\n",
        "plt.plot(history.history['loss'])\n",
        "plt.plot(history.history['val_loss'])\n",
        "plt.title('model loss')\n",
        "plt.ylabel('loss')\n",
        "plt.xlabel('epoch')\n",
        "plt.legend(['train', 'dev'], loc='upper left')\n",
        "plt.show()"
      ],
      "execution_count": 15,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "dict_keys(['val_loss', 'val_acc', 'loss', 'acc', 'lr'])\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nP7in9wXvuO6hV30CH1zkqhdOGu2esnte67npDiq76a6f6XoNdb0cOgxzT98z/gUBwa70Ua+Ze/Ld\nthhme0pCF42BZj3d6z43Q6sBrvQRWhfC6roSw5qprhdSYR70uMbdRL0/W71m7ua/eLy7Weel++6q\n2+ZMd55da6BhOxfQvhjtntlr8UEAACAASURBVJJbDYCLXofoFu772bMB6jb1fQMb/JgrrXx3v3t/\nzr/K9nW/yl1j3XRod7a7Gc55xQW4pt3L0gUEQnx/r+Ouhq/+4hp4m/d2QU6LoYNXNVlAgPvbf3ip\nK7mUFLnAfcEr7nsZ+FdY9KErQS35xFVfBobCsBeg58iyoAjudc/rXL5SE6FlP1fCKCl2T/7Tn3Dn\nH/QghHv+/QcGweB/wvgRrm3k3Kddfotyy0qcpX+PO353f78gTwm7QRu44gNXzRgYCjd+B3Wb7P/d\nHimqWiN+evXqpab6FRYV65s/r9NOD32r7f4xRV+evkYLiooP/4TFRarLv1Rd+KHv/SUlqs93VX3/\nYtXtK1Qfqau6YNz+6YoKVZ9spvrVXaoTr1X9VwvVvL3l02TvVv1PguqbZ6ku+9yl+Vdz1RXf7J+n\nDy5Vff1U1WLPZ/v9fXftnWvc+zXT3PuVU9w5Pr3Zbd8w221/NEb1tQFl50x8123ftlz1s1Gq/26h\nWpjn9uXtVR1/leriifvnY9KfVWc9d/Dv0ft7yM+ufP+iCS4fb56p+liD/b8jVdW0DS7NnFfd++8f\ncu9nPO3ydCjyMt338EJ3l7dShfmqT8Wrvj1EddJtqs+0ddfY9NuBz5ebofp4I/d3VlWdcLXqs+3L\n/k6lSkpUx57r/t6Px6l+eLnbVlFxkeqWxap7Nh7a5yq1eaHqdw/6/h4XjVd9uo3qI/Xc39v738PB\nrP9FNXXB4eWpAiBRK7mvWgnCHBGqyo8rdvDs96tYuS2T09s35LELOtOifsThnbCowFWp/PqCq7pB\noM1ZUCeufLptS9xT6sC/QsP2UKexq8vveV2FdItdz6L4ARAd79osFoyDU24vSzPtYVeFMex5V9XR\nrBd8PNLV9Y/8Glp6Zquf9Rys+d69Xv2tqzrZvtw1QpY+kTfrVXbO/L2u4RVcvXaXy1wVknce25zl\nfid96Rpcu15e9tQYGgUjPtz/OwoIhAtePoQvFff0GniA//Ydz4dv6rgG9jZnuWtXFNMKYtu4DgH1\n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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nlFJe7v8BJf+S72h04CoAAAAASUVORK5CYII=\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "F-QKHTmJQhi1",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "epoch_str = '-EPOCHS_' + str(EPOCHS)\n",
        "test_acc = 'test_acc_%.3f' % results_test[1]\n",
        "model.save('/content/drive/My Drive/cs230 project/models/' + 'VGG16-Class-Weights' + epoch_str + test_acc + '.h5')"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "uWZiTImpFQYf",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        ""
      ],
      "execution_count": 0,
      "outputs": []
    }
  ]
}